package com.wang.springbootinit.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.springbootinit.model.entity.Student;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;

import com.wang.springbootinit.model.entity.User;
import com.wang.springbootinit.model.param.StudentAddParam;
import com.wang.springbootinit.model.vo.UserStudentInfoVO;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;

public interface StudentService extends IService<Student> {
    /**
     * 添加学生
     */
    long addStudent(StudentAddParam param);


    /**
     * 获取学生信息
     */
    Student getStudentById(long id);


    Student getStudentByNumber(String number);

    /**
     * 更新学生信息
     */
    boolean updateStudent(Student student);
    
    /**
     * 删除学生
     */
    boolean deleteStudent(long id);
    
    /**
     * 获取登录学生信息
     */
    Student getLoginStudentInfo(HttpServletRequest request);
    
    /**
     * 更新学生个人信息
     */
    boolean updateStudentInfo(Student student, HttpServletRequest request);
    
    /**
     * 获取学生成绩信息
     */
    Map<String, Object> getStudentScores(HttpServletRequest request);
    
    /**
     * 导出学生信息
     */
    void exportStudents(HttpServletResponse response);
    
    /**
     * 导入学生信息
     */
    boolean importStudents(MultipartFile file);
    
    /**
     * 分析学生成绩
     */
    Map<String, Object> analyzeStudentScores(HttpServletRequest request);
    
    /**
     * 获取学生排名信息
     */
    Map<String, Object> getStudentRanking(HttpServletRequest request);
    
    /**
     * 分页查询学生列表
     * 支持多条件组合查询
     *
     * @param current 当前页码
     * @param pageSize 每页大小
     * @param studentNumber 学号（可选）
     * @param name 姓名（可选）
     * @param className 班级（可选）
     * @param major 专业（可选）
     * @param gender 性别（可选）
     * @return 分页查询结果
     */
    Page<Student> listStudents(Integer current, Integer pageSize, String studentNumber, String name, String className, String major, Integer gender);
    
    /**
     * 获取班级统计信息
     * 统计各班级学生人数
     *
     * @return 班级统计结果列表
     */
    List<Map<String, Object>> getClassStatistics();
    
    /**
     * 获取专业统计信息
     * 统计各专业学生人数
     *
     * @return 专业统计结果列表
     */
    List<Map<String, Object>> getMajorStatistics();

    UserStudentInfoVO getStudentInfo(HttpServletRequest request);
}